Article Sources
Frequency:
Article source master data changes are required to be sent in near real-time. Any change to an interface field in the external system should trigger the interface.
Expected data:
Article supply sources for all stores.
Article rounding profiles.
All sources of an article are expected in a single message.
Technical:
The article, and the suppliers, plants and stores referenced by its sources, must already exist in DSMDS.
A source is identified by the combination of supplier, plant and store.
For every article in the message, the valid sources in the message replace the existing sources of that article in DSMDS: new sources are created, existing sources are updated, and all other sources are deleted.
A source that produces a warning is not imported. If that source already exists in DSMDS, it is deleted, because it is not among the valid sources. If all sources of an article produce warnings, all sources of that article are deleted. "sources": [] also deletes all sources of the article.
An update overwrites all source fields: an omitted or null order_multiple is cleared, and an omitted is_main is reset to false. Always send the full source.
A blank plant_id or store_id is treated as absent. Suppliers, plants and stores are looked up within the organization. Multiple sources with is_main = true are not rejected.
There is no request-wide transaction: each article's sources are committed separately. If the request fails with 409 (e.g., sources or rounding_profiles is null), articles processed before the failure stay saved.
At most 50 warnings are returned; any further warnings are summarized as one additional warning.
POST https://{url}/article/sources/v1
Replace article sources.
Request Body
The request body is a JSON array of objects. Each object contains an article_id and a sources array with source details.
Top-level object:
| Name | Type | Required | Description |
|---|---|---|---|
| article_id | string | Yes | Article unique identifier in the external system |
| sources | array | Yes | Array of source objects for the article. Missing or null fails the request with 409. An empty array deletes all sources of the article |
Source object (inside sources array):
| Name | Type | Required | Description |
|---|---|---|---|
| supplier_id | string | Yes | Supplier unique identifier in the external system |
| plant_id | string | Conditional | Plant unique identifier in the external system. At least one of plant_id or store_id is required. Blank is treated as absent |
| store_id | string | Conditional | Store unique identifier in the external system. At least one of plant_id or store_id is required. Blank is treated as absent |
| rounding_profiles | integer[] | Yes | Rounding profiles used for ordering: 1 - no rounding, 2 - always round to DPA. If omitted or empty, the source is skipped with a warning. Explicit null fails the request with 409 |
| is_main | boolean | No | Whether this is the main supplier for the article. Defaults to false if omitted, also on updates |
| order_multiple | number | No | Order multiple for the source. Nullable; cleared if omitted or null. Max 7 integer digits and 3 decimal places |
Request Example
[
{
"article_id": "0001",
"sources": [
{
"supplier_id": "TL-Sanitex",
"plant_id": "P0000001",
"store_id": "P0000035",
"rounding_profiles": [1],
"is_main": true,
"order_multiple": 12.500
},
{
"supplier_id": "LPB-CocaCola",
"store_id": "P0000036",
"rounding_profiles": [2],
"is_main": false
}
]
}
]
Response
200: OK — Success
{
"success": true,
"message": "",
"data": null,
"warnings": []
}
200: OK — Success with warnings
{
"success": true,
"message": null,
"data": null,
"warnings": [
"Article 0001 source LPB-CocaCola was not imported, rounding profile '3' is unknown",
"Article 0001 source TL-Sanitex was not imported, rounding profile must be present",
"Article source not imported article not found by ID 0047"
]
}
200: OK — Error
{
"success": false,
"message": "Failed to map JSON",
"data": null,
"warnings": []
}